# 继承允许一个类（子类）继承另一个类（父类）的属性和方法。子类可以添加新的属性和方法，也可以重写父类的方法。
# Object是所有类的默认父类，没有指名父类，就是继承了 Object 类
# 父类-形状
class Shape:
    def __init__(self, color, name='shape'):
        self.color = color
        self.name = name
        self.c = 'shape'

    def show_color(self):
        print(f'这个{self.name}的颜色是：{self.color}')

    def t1(self):
        print(f'这个{self.name}的属性是：{self.c}')


# 子类-方形
class Square(Shape):
    def __init__(self, color, name, length):
        super().__init__(color, name)  # 调用父类的构造函数
        self.length = length  # 添加新的属性
        self.c = 'square'  # 存在同名属性，子类会覆盖父类的属性

    def area(self):
        print(f'这个{self.name}的面积是：{self.length ** 2}')

    def t1(self):
        super().t1()
        # 重写父类方法
        print('调用父类方法t1-完毕-方形子类！')


# 子类-圆形
class Circle(Shape):
    def __init__(self, color, name, radius):
        super().__init__(color, name)
        self.radius = radius
        self.c = 'circle'

    def area(self):
        print(f'这个{self.name}的面积是：{3.14 * self.radius ** 2}')

    def t1(self):
        # super().t1()
        # 重写父类方法
        print('重写父类的方法t1-完毕-圆形子类！')


def start():
    square = Square('red', '正方形', 9)
    square.show_color()
    square.area()
    square.t1()
    circle = Circle('blue', '圆形', 5)
    circle.show_color()
    circle.area()
    circle.t1()


if __name__ == '__main__':
    start()
